package com.my.json;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.ArrayList;
import java.util.List;

/**
 * https://www.cnblogs.com/hhhshct/p/9676604.html
 * 此方式配置必须这两个注解一起加上 2021年3月4日10:13:18 测试不通过 乱码 有bug
 * @author timo 2021/3/3
 */
//@Configuration
//@EnableWebMvc
public class MyWebmvcConfiguration implements WebMvcConfigurer {
    /**
     * 　　fastJson配置实体调用setSerializerFeatures方法可以配置多个过滤方式，常用的如下：
     * 　　1、WriteNullListAsEmpty  ：List字段如果为null,输出为[],而非null
     * 　　2、WriteNullStringAsEmpty ： 字符类型字段如果为null,输出为"",而非null
     * 　　3、DisableCircularReferenceDetect ：消除对同一对象循环引用的问题，默认为false（如果不配置有可能会进入死循环）
     * 　　4、WriteNullBooleanAsFalse：Boolean字段如果为null,输出为false,而非null
     * 　　5、WriteMapNullValue：是否输出值为null的字段,默认为false。
     * @param converters
     */
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        //1.需要定义一个convert转换消息的对象;
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        //2.添加fastJson的配置信息，比如：是否要格式化返回的json数据;
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.WriteNullStringAsEmpty,
                SerializerFeature.DisableCircularReferenceDetect,
                SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteDateUseDateFormat);
        //3处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.valueOf("application/json;charset=UTF-8"));
        //4.在convert中添加配置信息.
        fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        //5.将convert添加到converters当中.
        converters.add(fastJsonHttpMessageConverter);
    }

}
